package org.quickjsf.core.base.viewmodel;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;

import org.quickjsf.core.base.viewmodel.support.EditableViewModelSupport;
import org.quickjsf.core.base.viewmodel.support.FilterableViewModelSupport;

public class EditableAndFilterableViewModel<T> extends BaseDTPanelViewModel<T> implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -6789738926557091301L;
	
	private EditableViewModelSupport<T> editableViewModel;
	private FilterableViewModelSupport<T> filterViewModel;
	
	public EditableAndFilterableViewModel() {
		super();
		editableViewModel = new EditableViewModelSupport<T>(){
			private static final long serialVersionUID = 1L;
			@Override
			public BaseDTPanelViewModel<T> getDTPanelViewModel() {
				return EditableAndFilterableViewModel.this;
			}
		};
		filterViewModel = new FilterableViewModelSupport<T>(){
			private static final long serialVersionUID = 2080693431687961796L;
			@Override
			public BaseDTPanelViewModel<T> getDTPanelViewModel() {
				return EditableAndFilterableViewModel.this;
			}
		};
	}
	
	@Override
    @SuppressWarnings("unchecked")  
    protected Class<T> typeClass() {  
        return (Class<T>) ((ParameterizedType) getClass()  
                .getGenericSuperclass()).getActualTypeArguments()[0];  
    }

	public FilterableViewModelSupport<T> getFilterViewModel() {
		return filterViewModel;
	}

	public void setFilterViewModel(FilterableViewModelSupport<T> filterViewModel) {
		this.filterViewModel = filterViewModel;
	}

	public EditableViewModelSupport<T> getEditableViewModel() {
		return editableViewModel;
	}

	public void setEditableViewModel(EditableViewModelSupport<T> editableViewModel) {
		this.editableViewModel = editableViewModel;
	}
}
